home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / cross / GBDK-2.0.lha / GBDK / lib / set_data.s < prev    next >
Text File  |  1998-10-01  |  2KB  |  121 lines

  1.     .include    "global.s"
  2.  
  3.     .globl    .copy_vram
  4.  
  5.     .area    _CODE
  6.  
  7. _set_bkg_data::
  8. _set_win_data::
  9.     LDH    A,(.LCDC)
  10.     BIT    4,A
  11.     JP    NZ,_set_sprite_data
  12.  
  13.     PUSH    BC
  14.  
  15.     LDA    HL,7(SP)    ; Skip return address and registers
  16.     LD    B,(HL)        ; BC = data
  17.     DEC    HL
  18.     LD    C,(HL)
  19.     DEC    HL
  20.     LD    E,(HL)        ; E = nb_tiles
  21.     DEC    HL
  22.     LD    L,(HL)        ; L = first_tile
  23.     PUSH    HL
  24.  
  25.     XOR    A
  26.     OR    E        ; Is nb_tiles == 0?
  27.     JR    NZ,1$
  28.     LD    DE,#0x1000    ; DE = nb_tiles = 256
  29.     JR    2$
  30. 1$:
  31.     LD    H,#0x00        ; HL = nb_tiles
  32.     LD    L,E
  33.     ADD    HL,HL        ; HL *= 16
  34.     ADD    HL,HL
  35.     ADD    HL,HL
  36.     ADD    HL,HL
  37.     LD    D,H        ; DE = nb_tiles
  38.     LD    E,L
  39. 2$:
  40.     POP    HL        ; HL = first_tile
  41.     LD    A,L
  42.     RLCA            ; Sign extend (patterns have signed numbers)
  43.     SBC    A
  44.     LD    H,A
  45.     ADD    HL,HL        ; HL *= 16
  46.     ADD    HL,HL
  47.     ADD    HL,HL
  48.     ADD    HL,HL
  49.  
  50.     PUSH    BC
  51.     LD    BC,#0x9000
  52.     ADD    HL,BC
  53.     POP    BC
  54.  
  55. 3$:                ; Special version of '.copy_vram'
  56.     BIT    3,H        ; Bigger than 0x9800
  57.     JR    Z,4$
  58.     BIT    4,H
  59.     JR    Z,4$
  60.     RES    4,H        ; Switch to 0x8800
  61. 4$:
  62.     LDH    A,(.STAT)
  63.     AND    #0x02
  64.     JR    NZ,4$
  65.  
  66.     LD    A,(BC)
  67.     LD    (HL+),A
  68.     INC    BC
  69.     DEC    DE
  70.     LD    A,D
  71.     OR    E
  72.     JR    NZ,3$
  73.  
  74.     POP    BC
  75.     RET
  76.  
  77. _set_sprite_data::
  78.     PUSH    BC
  79.  
  80.     LDA    HL,7(SP)    ; Skip return address and registers
  81.     LD    B,(HL)        ; BC = data
  82.     DEC    HL
  83.     LD    C,(HL)
  84.     DEC    HL
  85.     LD    E,(HL)        ; E = nb_tiles
  86.     DEC    HL
  87.     LD    L,(HL)        ; L = first_tile
  88.     PUSH    HL
  89.  
  90.     XOR    A
  91.     OR    E        ; Is nb_tiles == 0?
  92.     JR    NZ,1$
  93.     LD    DE,#0x1000    ; DE = nb_tiles = 256
  94.     JR    2$
  95. 1$:
  96.     LD    H,#0x00        ; HL = nb_tiles
  97.     LD    L,E
  98.     ADD    HL,HL        ; HL *= 16
  99.     ADD    HL,HL
  100.     ADD    HL,HL
  101.     ADD    HL,HL
  102.     LD    D,H        ; DE = nb_tiles
  103.     LD    E,L
  104. 2$:
  105.     POP    HL        ; HL = first_tile
  106.     LD    H,#0x00
  107.     ADD    HL,HL        ; HL *= 16
  108.     ADD    HL,HL
  109.     ADD    HL,HL
  110.     ADD    HL,HL
  111.  
  112.     PUSH    BC
  113.     LD    BC,#0x8000
  114.     ADD    HL,BC
  115.     POP    BC
  116.  
  117.     CALL    .copy_vram
  118.  
  119.     POP    BC
  120.     RET
  121.